package com.jiaqiang.chatgpt.domain.billing;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * 账户信息
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Subscription implements Serializable {

    @JsonProperty("object")
    private String object;

    /** 表示该账户是否有支付方式。 */
    @JsonProperty("has_payment_method")
    private boolean hasPaymentMethod;

    /** 表示该账户是否已经被取消。 */
    @JsonProperty("canceled")
    private boolean canceled;

    /** 表示账户取消的时间，可能是一个时间戳或者日期对象。 */
    @JsonProperty("canceled_at")
    private Object canceledAt;

    /** 表示账户是否拖欠付款或欠费。*/
    @JsonProperty("delinquent")
    private Object delinquent;

    /** 表示账户的访问截止时间，通常是一个时间戳。*/
    @JsonProperty("access_until")
    private long accessUntil;

    /** 表示账户的软限制，可能是某种资源或服务的限制 */
    @JsonProperty("soft_limit")
    private long softLimit;

    /** 表示账户的硬限制，通常是软限制的上限。 */
    @JsonProperty("hard_limit")
    private long hardLimit;

    /** 表示系统对账户的硬限制，可能是系统整体资源或服务的限制 */
    @JsonProperty("system_hard_limit")
    private long systemHardLimit;

    /** 与上述限制相对应的金额，通常是以美元为单位。 */
    @JsonProperty("soft_limit_usd")
    private double softLimitUsd;
    @JsonProperty("hard_limit_usd")
    private double hardLimitUsd;
    @JsonProperty("system_hard_limit_usd")
    private double systemHardLimitUsd;

    /** 表示账户的计划信息 */
    @JsonProperty("plan")
    private Plan plan;

    /** 表示账户的名称或标识符。*/
    @JsonProperty("account_name")
    private String accountName;

    /** 表示账户的采购订单号 */
    @JsonProperty("po_number")
    private Object poNumber;

    /** 表示账单的邮件地址。 */
    @JsonProperty("billing_email")
    private Object billingEmail;

    /** 表示账户相关的税务标识 */
    @JsonProperty("tax_ids")
    private Object taxIds;

    /** 表示账单地址。*/
    @JsonProperty("billing_address")
    private Object billingAddress;

    /** 表示业务地址。*/
    @JsonProperty("business_address")
    private Object businessAddress;

}
